﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QLNhaThuoc.DTO;
using QLNhaThuoc.BL;
using QLNhaThuoc.MyClass;

namespace QLNhaThuoc
{
    public partial class Form_PhieuNhap : Form
    {
        public Form_PhieuNhap()
        {
            InitializeComponent();
        }

        public PhieuNhap phieuNhapInfo;
        public PhieuNhapControl phieuNhapCtrl;
        ThuocControl thuocCtrl;
        CongTyControl congTyCtrl;
        NhanVienControl nhanVienCtrl;
        public bool isAdding = false;
        public bool isViewing = false;
        private void Form_PhieuNhap_Load(object sender, EventArgs e)
        {
            thuocCtrl = new ThuocControl();
            congTyCtrl = new CongTyControl();
            nhanVienCtrl = new NhanVienControl();
            XuatListCongTy();

            if (isViewing == true)
            {
                XuatPhieuNhap();
                tbMaPN.ReadOnly = true;
                btSave.Enabled = false;
            }
        }

        private void XuatListCongTy()
        {
            cbCongTy.DataSource = congTyCtrl.LayListCongTy();
            cbCongTy.ValueMember = "MaCT";
            cbCongTy.DisplayMember = "Ten";
        }

        private void XuatPhieuNhap()
        {
            dtpNgayNhap.Value = phieuNhapInfo.NgayNhap;
            tbMaPN.Text = phieuNhapInfo.MaPN.ToString();
            tbMaNV.Text = phieuNhapInfo.MaNV;
            NhanVien nv = nhanVienCtrl.LayNhanVienTheoMa(phieuNhapInfo.MaNV);
            tbTenNV.Text = nv.Ho + " " + nv.Ten;
            cbCongTy.SelectedValue = phieuNhapInfo.MaCongTy;
            tbTienNo.Text = phieuNhapInfo.TienNo.ToString();
            dgvCTPN.AutoGenerateColumns = false;
            dgvCTPN.DataSource = phieuNhapInfo.ctPhieuNhap;
        }

        private void btSave_Click(object sender, EventArgs e)
        {
            if (KiemTraDuLieuNhap() == true)
            {
                PhieuNhap info = new PhieuNhap();
                LayThongTinPhieuNhap(ref info);
                if (isAdding == true)
                {
                    if (phieuNhapCtrl.KiemTraPK(info) == false)
                    {
                        phieuNhapCtrl.ThemPN(info);
                    }
                }

                isAdding = false;
                isViewing = true;
                this.Close();
            }          
        }

        private void btCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        Thuoc thuoc;
        private void dgvCTPN_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            switch (dgvCTPN.Columns[e.ColumnIndex].Name)
            {
                case "MaThuoc":
                    if (String.IsNullOrEmpty(e.FormattedValue.ToString()))
                    {
                        dgvCTPN.Rows[e.RowIndex].Cells["MaThuoc"].ErrorText = "Bạn chưa nhập mã thuốc";
                        e.Cancel = true;
                    }
                    else
                    {
                        thuoc = thuocCtrl.LayThuocTheoMa(e.FormattedValue.ToString());
                        if (thuoc == null)
                        {
                            dgvCTPN.Rows[e.RowIndex].ErrorText = "Không tồn tại mã thuốc này";
                            e.Cancel = true;
                        }
                        else
                        {
                            dgvCTPN.Rows[e.RowIndex].Cells["MaThuoc"].Tag = thuoc.MaThuoc;
                        }
                    }
                    break;
                case "SoLuong":
                    if (String.IsNullOrEmpty(e.FormattedValue.ToString()))
                    {
                        dgvCTPN.Rows[e.RowIndex].Cells["SoLuong"].ErrorText = "Bạn chưa nhập số lượng";
                        e.Cancel = true;
                    }
                    else
                    {
                        dgvCTPN.Rows[e.RowIndex].Cells["SoLuong"].Tag = e.FormattedValue;
                    }
                    break;
            }
        }

        private void dgvCTPN_CellValidated(object sender, DataGridViewCellEventArgs e)
        {
            PhieuHelper.ValidateCell(dgvCTPN, e, thuoc);
        }

        private void LayThongTinPhieuNhap(ref PhieuNhap info)
        {
            info.NgayNhap = dtpNgayNhap.Value;
            //info.MaPN = tbMaPN.Text;
            info.MaNV = tbMaNV.Text;
            info.MaCongTy = cbCongTy.SelectedValue.ToString();
            info.TienNo = int.Parse(tbTienNo.Text);

            CTPhieuHelper helper = new CTPhieuNhapHelper
            {
                DataSource = dgvCTPN,
                //MaPhieu = int.Parse(tbMaPN.Text)
            };
            info.ctPhieuNhap = helper.TaoDanhSachChiTiet();
            info.ThanhTien = helper.ThanhTien;
        }

        private bool KiemTraDuLieuNhap()
        {
            if (tbMaNV.Text == "")
            {
                Utils.ShowError("Bạn chưa nhập mã nhân viên", "Thông báo");
                return false;
            }

            if (cbCongTy.SelectedIndex == -1)
            {
                Utils.ShowError("Bạn chưa chọn công ty", "Thông báo");
                return false;
            }

            if (tbTienNo.Text == "")
            {
                Utils.ShowError("Bạn chưa nhập tiền nợ", "Thông báo");
                return false;
            }

            if (dgvCTPN.Rows.Count == 1)
            {
                Utils.ShowError("Bạn chưa nhập chi tiết phiếu nhập", "Thông báo");
                return false;
            }

            return true;
        }

        public delegate void formClosed();
        public event formClosed handle_formClosed;
        private void Form_PhieuNhap_FormClosed(object sender, FormClosedEventArgs e)
        {
            handle_formClosed();
        }

        private void cbCongTy_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox tmp = (ComboBox)sender;
            CongTy ct = (CongTy)tmp.SelectedItem;
            tbDiaChiCT.Text = ct.DiaChi;
        }

        private void tbMaNV_Validating(object sender, CancelEventArgs e)
        {
            PhieuHelper.KiemTraNhanVienTonTai(sender, e, nhanVienCtrl, errorProvider1, tbTenNV);
        }
    }
}
